package com.mastercard.assets.web.struts.actions;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCuenta;
import com.mastercard.assets.jpa.TblCuentaPaquete;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.jpa.TblTipoCuentaPaquete;
import com.mastercard.assets.notifications.NotificationUtil;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.AssetAsignarPaquetesBDMTitularForm;
import com.mastercard.assets.web.util.to.CuentasPaquetesTo;
import com.mastercard.assets.web.util.to.ManejadorPaquetesDeAssetBDMTitular;
import com.mastercard.assets.web.util.to.UserLogin;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class AssetsAsignacionPaquetesRegistrarBDMTitular
        extends
		Action
{
    public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
    {
        HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;		
                
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
                
                
                try
                {
                    
                    AssetAsignarPaquetesBDMTitularForm f = ( AssetAsignarPaquetesBDMTitularForm ) form ;
                    
                    ManejadorPaquetesDeAssetBDMTitular paqueteSLL = f.getBdmT( ).getPaqueteSLL( ) ,
                            paqueteDLL = f.getBdmT( ).getPaqueteDLL( ) ,
                            paqueteSLR = f.getBdmT( ).getPaqueteSLR( ) ,
                            paqueteDLR = f.getBdmT( ).getPaqueteDLR( ) ,
                            paqueteSRL = f.getBdmT( ).getPaqueteSRL( ) ,
                            paqueteDRL = f.getBdmT( ).getPaqueteDRL( ) ,
                            paqueteSRR = f.getBdmT( ).getPaqueteSRR( ) ,
                            paqueteDRR = f.getBdmT( ).getPaqueteDRR( ) ;
                                
                   TblAsset Asset = MasterCardDAO.getAsset( f.getAsset( ) ) ;
                   List< CuentasPaquetesTo > Totales = f.getBdmT( ).getManejador( ) ;
                   int totalesAsignacion = 0 ,
                           totalesDevolver = 0 ;
                   
                   for( CuentasPaquetesTo T : Totales )
                   {
                       if( T.getPonerQuitar( ) < 0 ) {
                           totalesDevolver += T.getPonerQuitar( ) ;
                       } else if( T.getPonerQuitar( ) > 0 ) {
                           totalesAsignacion = T.getPonerQuitar( ) ;
                       }
                   }
                   
                   if( totalesDevolver == 0 && totalesAsignacion == 0 )
                   {
                       user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.CantidadEmpty" ) ) ;
                       user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
                       request.setAttribute( "UserLogin" , user ) ;
                       request.setAttribute("Asset", Asset.getNombre( ) ) ;
                       request.setAttribute( "form", f ) ;
			
                       MasterCardDAO.closeEntityManager( ) ;
                       return mapping.findForward( "errors" ) ;
                   }
                    
                if( paqueteSLL.getCantidad( ) > 0 )
                {
                    int asignarSLL = 0 , disponiblesSLL = paqueteSLL.getDisponibles( ) , resSLL = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 1 )
                        {                            
                        
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarSLL += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarSLL = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarSLL < 0 )
                            {                                
                                resQuitarSLL *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SLLOver" , resQuitarSLL ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 1 , 1 , 1 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
					
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resSLL = disponiblesSLL - asignarSLL ;
                    
                    if( resSLL < 0 )
                    {                        
                        resSLL *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SLLOver" , resSLL ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;                        
                    }
                    
                }
                
                if( paqueteDLL.getCantidad( ) > 0 )
                {
                    int asignarDLL = 0 , disponiblesDLL = paqueteDLL.getDisponibles( ) , resDLL = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 2 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarDLL += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarDLL = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarDLL < 0 )
                            {
                                resQuitarDLL *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DLLOver" , resQuitarDLL ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 1 , 1 , 2 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resDLL = disponiblesDLL - asignarDLL ;
                    
                    if( resDLL < 0 )
                    {
                        resDLL *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DLLOver" , resDLL ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                
                if( paqueteSLR.getCantidad( ) > 0 )
                {
                    int asignarSLR = 0 , disponiblesSLR = paqueteSLR.getDisponibles( ) , resSLR = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 3 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarSLR += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarSLR = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarSLR < 0 )
                            {
                                resQuitarSLR *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SLROver" , resQuitarSLR ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 1 , 2 , 1 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resSLR = disponiblesSLR - asignarSLR ;
                    
                    if( resSLR < 0 )
                    {
                        resSLR *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SLROver" , resSLR ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                
                if( paqueteDLR.getCantidad( ) > 0 )
                {
                    int asignarDLR = 0 , disponiblesDLR = paqueteDLR.getDisponibles( ) , resDLR = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 4 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarDLR += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarDLR = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarDLR < 0 )
                            {
                                resQuitarDLR *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DLROver" , resQuitarDLR ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 1 , 2 , 2 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resDLR = disponiblesDLR - asignarDLR ;
                    
                    if( resDLR < 0 )
                    {
                        resDLR *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DLROver" , resDLR ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                
                if( paqueteSRL.getCantidad( ) > 0 )
                {
                    int asignarSRL = 0 , disponiblesSRL = paqueteSRL.getDisponibles( ) , resSRL = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 5 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarSRL += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarSRL = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarSRL < 0 )
                            {
                                resQuitarSRL *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SRLOver" , resQuitarSRL ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 2 , 1 , 1 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resSRL = disponiblesSRL - asignarSRL ;
                    
                    if( resSRL < 0 )
                    {
                        resSRL *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SRLOver" , resSRL ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                
                if( paqueteDRL.getCantidad( ) > 0 )
                {
                    int asignarDRL = 0 , disponiblesDRL = paqueteDRL.getDisponibles( ) , resDRL = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 6 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarDRL += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarDRL = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarDRL < 0 )
                            {
                                resQuitarDRL *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DRLOver" , resQuitarDRL ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 2 , 1 , 2 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resDRL = disponiblesDRL - asignarDRL ;
                    
                    if( resDRL < 0 )
                    {
                        resDRL *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DRLOver" , resDRL ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                
                if( paqueteSRR.getCantidad( ) > 0 )
                {
                    int asignarSRR = 0 , disponiblesSRR = paqueteSRR.getDisponibles( ) , resSRR = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 7 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarSRR += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarSRR = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarSRR < 0 )
                            {
                                resQuitarSRR *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.SRROver" , resQuitarSRR ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 2 , 2 , 1 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resSRR = disponiblesSRR - asignarSRR ;
                    
                    if( resSRR < 0 )
                    {
                        resSRR *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DRLOver" , resSRR ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                
                if( paqueteDRR.getCantidad( ) > 0 )
                {
                    int asignarDRR = 0 , disponiblesDRR = paqueteDRR.getDisponibles( ) , resDRR = 0 ;
                    List< CuentasPaquetesTo > cpTo = f.getBdmT( ).getManejador( ) ;
                    for( CuentasPaquetesTo CPTo : cpTo )
                    {
                        if( CPTo.getTipo( ) == 8 )
                        {
                        int paqs = CPTo.getPonerQuitar( ) ;
                        if( paqs > 0 )
                        {
                            asignarDRR += paqs ;
                        }else if( paqs < 0 ){
                            int resQuitarDRR = CPTo.getPaquetes( ) + paqs ;
                            if( resQuitarDRR < 0 )
                            {
                                resQuitarDRR *= -1 ;
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DRROver" , resQuitarDRR ) ) ;
						
				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                            paqs *= -1 ;
                            int cuentaQuitar =  CPTo.getCuenta( ) ;
                            List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
                            
                            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset(
							1 , 1 , f.getAsset( ) , 1 , 2 , 2 , 2 , 1 , cuentaQuitar ) ;
                            
                            if( cuentaPaquete.isEmpty( ) || cuentaPaquete.size( ) < paqs )
                            {
                                user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.Asigned" ) ) ;

				user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
				request.setAttribute( "UserLogin" , user ) ;
                                request.setAttribute("Asset", Asset.getNombre( ) ) ;
                                request.setAttribute( "form", f ) ;
				
                                MasterCardDAO.closeEntityManager( ) ;
				return mapping.findForward( "errors" ) ;
                            }
                            
                        }
                        }
                    }
                    
                    resDRR = disponiblesDRR - asignarDRR ;
                    
                    if( resDRR < 0 )
                    {
                        resDRR *= -1 ;
                        user.setMessageError( 
                                MCUtil.messages.getString( "com.mastercard.assets.web.errors.modules.asset.packages.DRLOver" , resDRR ) ) ;
						
			user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
						
			request.setAttribute( "UserLogin" , user ) ;
                        request.setAttribute("Asset", Asset.getNombre( ) ) ;
                        request.setAttribute( "form", f ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "errors" ) ;
                    }
                }
                    
                    TblTipoCuenta tipoCuenta = user.getCountType( ) ;
                    List< TblCuenta > cuentas = MasterCardDAO.getAllActiveCountsWithCountType(  user.getCountType().getCveTipoCuenta( ) ) ;                                        
                    TblAsset asset = MasterCardDAO.getAsset( f.getAsset( ) )  ;
                    StringBuffer sb = new StringBuffer( ) ;                    
                    
                    List< CuentasPaquetesTo > manejador = f.getBdmT( ).getManejador( ),
                            dotosNotificacion = new ArrayList< CuentasPaquetesTo >( ) ;                   
                    
                    
                    int i = 0 ;
                    for( TblCuenta c : cuentas )
                    {// BARRE CUENTAS INI
                        for( CuentasPaquetesTo Paqs : manejador )
                        {// barre paquetes INI
                            int cuenta = Paqs.getCuenta( ) ,
                                tipo = Paqs.getTipo( ) ,
                                ponerQuitar = Paqs.getPonerQuitar( ),
                                    t = 0;
                            
                            if( tipo == 7 || tipo == 5 || tipo == 3 || tipo == 1 ){
                                t = 1 ;
                            }else{
                                t = 2 ;
                            }
                            
                            if( cuenta == c.getCveCuenta( ) )
                            {
                                
                                if( ponerQuitar > 0 )
                                {
                                    asignarPaquetes( ponerQuitar , c , tipoCuenta , tipo , asset.getCveAsset( ) , user ) ;
                                    
                                    if( dotosNotificacion.isEmpty( ) ){                                        
                                        CuentasPaquetesTo n = new CuentasPaquetesTo( ponerQuitar, 0 , cuenta, t ) ;
                                        dotosNotificacion.add( n ) ;
                                    }else{
                                        boolean esta = false ;
                                        
                                        for( CuentasPaquetesTo datoNoti : dotosNotificacion ){// barre datos para notificacion INI
                                            if( datoNoti.getCuenta( ) == cuenta && datoNoti.getTipo( ) == t ){
                                                int suma = datoNoti.getPonerQuitar( ) + ponerQuitar ;
                                                datoNoti.setPonerQuitar( suma ) ;
                                                esta = true ;
                                                break ;
                                            }
                                        }// barre datos para notificacion FIN
                                        if( !esta  ){
                                            CuentasPaquetesTo n = new CuentasPaquetesTo( ponerQuitar, 0 , cuenta, t ) ;
                                            dotosNotificacion.add( n ) ;
                                        }
                                                                                    
                                    }
                                        
                                }else if( ponerQuitar < 0 )
                                {
                                    
                                    ponerQuitar *= -1 ;
                                        
                                    regresaPaquetes( ponerQuitar ,  asset.getCveAsset( ) , cuenta , tipo ) ;
                                        
                                }
                                
                            }
                        }// barre paquetes FIN
                        
                       i ++ ; 
                    }// BARRE CUENTAS FIN
                    
//                    user.setNextWorkArea( "/WEB-INF/pages/WorkArea/AssetsAsignarPaqueteDesplegarFormularioBDMTitular.jsp" ) ;
                    user.setNextWorkArea( "/AssetsAsignacionPaquetesPreparacionBDMTitular.do?asset=" + asset.getCveAsset( ) ) ;
                    request.setAttribute( "form" , f ) ;
                    request.setAttribute( "UserLogin" , user ) ;
                    request.setAttribute("Asset", Asset.getNombre( ) ) ;
                    
                    for( CuentasPaquetesTo datoNoti : dotosNotificacion ){
                        TblCuenta cta = MasterCardDAO.findCountById( datoNoti.getCuenta( ) ) ;
                        NotificationUtil.throwNotificationTypeAuthorizePackage( datoNoti.getPonerQuitar( ) , datoNoti.getTipo( ) , Asset , user , cta ) ;
                    }
                    
                }catch( Exception e )
		{
                    MasterCardDAO.closeEntityManager( ) ;
                    e.printStackTrace( ) ;
                    user.setMessageError( e.getMessage( ) ) ;
		}
                
                MasterCardDAO.closeEntityManager( ) ;
                return mapping.findForward( "success" ) ;
    }
    
    public List< TblPaquete > tomaPaquetes( int tipo , int cveAsset )
    {
        StringBuffer sb = new StringBuffer( ) ;
        List< TblPaquete > paks = new ArrayList< TblPaquete >( ) ;
                
        try
        {
            if( tipo == 1 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 1 , 1 , 1 , 2 , 1 ) ;//SLL
            }else if( tipo == 2 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 2 , 1 , 1 , 2 , 1 ) ;//DLL
            }else if( tipo == 3 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 1 , 1 , 2 , 2 , 1 ) ;//SLR
            }else if( tipo == 4 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 2 , 1 , 2 , 2 , 1 ) ;//DLR
            }else if( tipo == 5 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 1 , 2 , 1 , 2 , 1 ) ;//SRL
            }else if( tipo == 6 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 2 , 2 , 1 , 2 , 1 ) ;//DRL
            }else if( tipo == 7 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 1 , 2 , 2 , 2 , 1 ) ;//SRR
            }else if( tipo == 8 )
            {
                paks = MasterCardDAO.getAllPackagesOfAssetOnFlag( cveAsset , 2 , 2 , 2 , 2 , 1 ) ;//DRR
            }
            
        }catch( MasterCardException mce )
        {
            MasterCardDAO.closeEntityManager( ) ;
            sb.append( mce.getSingularMessage( ) + "\n" ) ;
        }
        
        return paks ;
    }
    
    public void asignarPaquetes( int ponerQuitar , TblCuenta cuenta , TblTipoCuenta tipoCuenta , int tipo , int asset , UserLogin user ) throws MasterCardException
    {
        StringBuffer sb = new StringBuffer( ) ;
        List< TblTipoCuentaPaquete > tipoCuentaPaquete = new ArrayList< TblTipoCuentaPaquete >( ) ;
        TblAsset Asset = MasterCardDAO.getAsset( asset ) ;
        int habitacion = 0 ;
        
        for( int y = 0 ; y < ponerQuitar ; y++ )
        {
            List< TblPaquete >  paks = tomaPaquetes( tipo , asset ) ;
            
            
            try
            {
                TblPaquete paquete = new TblPaquete( ) ;
                TblTipoCuentaPaquete tcp = new TblTipoCuentaPaquete( ) ;
                boolean datos = false ;

                for( TblPaquete p : paks )
                {
                    tipoCuentaPaquete = p.getTblTipoCuentaPaquetes( ) ;

                    for( TblTipoCuentaPaquete t : tipoCuentaPaquete )
                    {
                        if( t.getStatus( ) == 1 && t.getBandera( ) == 1 && t.getTblTipoCuenta( ).getCveTipoCuenta( ) == tipoCuenta.getCveTipoCuenta( ) )
                        {
                            tcp = t ;
                            datos = true ;
                            break ;
                        }
                    }
                    
                    if( datos )
                    {
                        paquete = p ;
                        break ;
                    }
                }
                
                if( datos )
                {
                    MasterCardDAO.BDMTitularasignaPaqueteACuenta( paquete , tcp , cuenta ) ;
                    habitacion = paquete.getHabitacion( ) ;
//                    NotificationUtil.throwNotificationTypeAuthorizePackage( ponerQuitar , habitacion , Asset , user , cuenta ) ;
                }


            }catch( MasterCardException mce )
            {
                MasterCardDAO.closeEntityManager( ) ;
                sb.append( mce.getSingularMessage( ) + "\n" ) ;
            }            
        }
        
//        NotificationUtil.throwNotificationTypeAuthorizePackage( ponerQuitar , habitacion , Asset , user , cuenta ) ;
    }
    
    public List< TblCuentaPaquete > tomaCuentaPaquetes( int cveAsset , int cuenta , int tipo )
    {
        StringBuffer sb = new StringBuffer( ) ;
        List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
        
        if( tipo == 1 )// SLL
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 1 , 1 , 1 , 1 , cuenta ) ;
        }else if( tipo == 2 )// DLL
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 1 , 1 , 2 , 1 , cuenta ) ;
        }else if( tipo == 3 )// SLR
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 1 , 2 , 1 , 1 , cuenta ) ;
        }else if( tipo == 4 )// DLR
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 1 , 2 , 2 , 1 , cuenta ) ;
        }else if( tipo == 5 )// SRL
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 2 , 1 , 1 , 1 , cuenta ) ;
        }else if( tipo == 6 )// DRL
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 2 , 1 , 2 , 1 , cuenta ) ;
        }else if( tipo == 7 )// SRR
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 2 , 2 , 1 , 1 , cuenta ) ;
        }else if( tipo == 8 )// DRR
        {
            cuentaPaquete = MasterCardDAO.getPaquetesEnCuentaActivosPorTipoANDAsset( 1 , 1 , cveAsset , 1 , 2 , 2 , 2 , 1 , cuenta ) ;
        }
        
        return cuentaPaquete ;
    }
    
    public void regresaPaquetes( int ponerQuitar , int cveAsset , int cuenta , int tipo )
    {
        StringBuffer sb = new StringBuffer( ) ;
        List< TblCuentaPaquete > cuentaPaquete = new ArrayList< TblCuentaPaquete >( ) ;
        
        for( int x = 0 ; x < ponerQuitar ; x++ )
        {
            try
            {
                cuentaPaquete = tomaCuentaPaquetes( cveAsset , cuenta , tipo ) ;                                                
                                                
                TblCuentaPaquete CP = new TblCuentaPaquete( ) ;
                TblTipoCuentaPaquete tcp = new TblTipoCuentaPaquete( ) ;
                                            
                for( TblCuentaPaquete cp : cuentaPaquete )
                {
                    TblPaquete paquete = cp.getTblPaquete( ) ;
                    List< TblTipoCuentaPaquete > ltcp = new ArrayList< TblTipoCuentaPaquete >( ) ;

                    ltcp = paquete.getTblTipoCuentaPaquetes( ) ;
                    for( TblTipoCuentaPaquete l : ltcp )
                    {
                        if( l.getBandera( ) == 3 && l.getStatus( ) == 1 )
                        {
                            tcp = l ;
                            break ;
                        }                                                        
                    }
                    
                    CP = cp ;
                    break ;
                }

                 MasterCardDAO.regresarPaquete( CP , tcp ) ;
                 
            }catch( MasterCardException mce )
            {
                MasterCardDAO.closeEntityManager( ) ;
                sb.append( mce.getSingularMessage( ) + "\n" ) ;
            }                                            
        }        
    }
    
    //FIN DE LA CLASE
}
